package OverrideStudy;

/**
 *
 * 方法的重写（override/overwrite）
 *
 * 1、重写：子类继承父类以后，可以对父类中同名同参数的方法，进行覆盖操作
 *
 * 2、应用：重写以后，当创建子类对象以后，通过子类对象调用父类中的同名同参数的方法时，实际执行的是重写后的方法
 *
 * 3、重写的规定：
 *      方法的声明：权限修饰符 返回值类型 方法名（形参列表）throws 异常类型{
 *                  //方法体
 *                }
 *      约定俗成：子类中叫重写的方法，父类中的叫被重写的方法
 *      ① 子类重写的方法名和形参列表于父类被重写的方法的方法名和形参列表相同
 *      ② 子类重写的方法的权限修饰符不得小于父类被重写的方法的权限修饰符
 *          ->特殊情况，子类不能重写父类中的private方法
 *      ③ 返回值类型：
 *          ->父类被重写的方法的返回值类型是void，则子类重写的返回值类型也只能是void
 *          ->父类被重写的方法的返回值类型是A类型，则子类重写的方法的返回值类型可以是A类，或A的子类（应用数据类型）
 *          ->父类被重写的方法的返回值类型是基本数据类型，则子类重写的方法的返回值类型必须是相同的数据类型
 *      ④ 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
 *      ⑤ 子类和父类中同名同参数的方法要么都声明为非static的，要么都声明为static的
 * */

public class PersonTest {
    public static void main(String[] args) {
        Student s = new Student("计算结科学于技术");
        Person p = new Person();

        p.eat();
        s.eat();
        s.walk(10);

        s.study();


    }
}
